package fr.bludwarf.skywarrior.global;

import fr.bludwarf.skywarrior.joueur.Batiment;
import fr.bludwarf.skywarrior.joueur.EtatIle;
import fr.bludwarf.skywarrior.joueur.EtatJoueur;
import fr.bludwarf.skywarrior.joueur.Expedition;
import fr.bludwarf.skywarrior.joueur.Techno;


public abstract class TypeEvenement<T extends Object> {
	
	public static final TypeEvenement<Object> POP = new TypeEvenement<Object>() {
		@Override
		protected void execute(Object o, EtatJoueur etatJoueur, EtatIle etatIle) {
			etatIle.incPop(1);
		}
	};
	
	public static final TypeEvenement<Object> CYCLE = new TypeEvenement<Object>() {
		@Override
		protected void execute(Object o, EtatJoueur etatJoueur, EtatIle etatIle) {
			etatJoueur.ajouter(etatJoueur.getProduction());
		}
	};
	
	public static final TypeEvenement<Batiment> CONSTRUIRE = new TypeEvenement<Batiment>() {
		@Override
		protected void execute(Batiment batiment, EtatJoueur etatJoueur, EtatIle etatIle) {
			// On dépense les ressources pour construire le bâtiment
			// On commence la construction du bâtiment
		}
	};
	
	public static final TypeEvenement<Batiment> TERMINER = new TypeEvenement<Batiment>() {
		@Override
		protected void execute(Batiment batiment, EtatJoueur etatJoueur, EtatIle etatIle) {
			// On supprime le bâtiment de la liste des constructions
			// On l'ajoute dans la liste des bâtiments terminés
		}
	};
	
	public static final TypeEvenement<Techno> TECHNO = new TypeEvenement<Techno>() {
		@Override
		protected void execute(Techno techno, EtatJoueur etatJoueur, EtatIle etatIle) {
			// On ajoute la techno au joueur
			// On passe à la techno suivante
		}
	};
	
	public static final TypeEvenement<Expedition> COLONISER = new TypeEvenement<Expedition>() {
		@Override
		protected void execute(Expedition expe, EtatJoueur etatJoueur, EtatIle etatIle) {
			
		}
	};
	
}
